package com.anyou.mall.order.service;

import com.anyou.common.core.domain.ApiResult;
import com.anyou.common.core.domain.entity.SysUser;
import com.anyou.mall.goo.goods.domain.GoodsVo2;
import com.anyou.mall.goo.goods.domain.LiGoodsSku;
import com.anyou.mall.goo.goodsSku.domain.GooGoodsSku;
import com.anyou.mall.index.param.OrderNumParam;
import com.anyou.mall.index.vo.*;
import com.anyou.mall.order.domain.OrdOrder;
import com.anyou.mall.order.param.DeliveryParam;
import com.anyou.mall.order.param.DriverListParam;
import com.anyou.mall.order.vo.DriverListVo;
import com.anyou.mall.order.vo.DriverOrder;
import com.anyou.mall.order.vo.SpecsVo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 订单Service接口
 *
 * @author ruoyi
 * @date 2022-03-21
 */
public interface IOrdOrderService extends IService<OrdOrder>
{
    /**
     * 查询订单
     *
     * @param orderId 订单主键
     * @return 订单
     */
    public OrdOrder selectOrdOrderByOrderId(Long orderId);

    /**
     * 查询订单列表
     *
     * @param ordOrder 订单
     * @return 订单集合
     */
    public List<OrdOrder> selectOrdOrderList(OrdOrder ordOrder);

    /**
     * 新增订单
     *
     * @param ordOrder 订单
     * @return 结果
     */
    public int insertOrdOrder(OrdOrder ordOrder);

    /**
     * 修改订单
     *
     * @param ordOrder 订单
     * @return 结果
     */
    public int updateOrdOrder(OrdOrder ordOrder);

    /**
     * 批量删除订单
     *
     * @param orderIds 需要删除的订单主键集合
     * @return 结果
     */
    public int deleteOrdOrderByOrderIds(Long[] orderIds);

    /**
     * 删除订单信息
     *
     * @param orderId 订单主键
     * @return 结果
     */
    public int deleteOrdOrderByOrderId(Long[] orderId);

    /**
     * 订单发货
     * @param
     * @return
     */
    ApiResult orderDelivery( Long orderId, Long logisticsId,String logisticsName, String logisticsNo, String contactName, String contactPhone);

    /**
     * 获取订单明细业务
     *
     * @param orderNo 订单号
     * @return 订单明细
     */
    ApiResult orderDetailed(String orderNo);

    /**
     * 配送订单列表
     * @param ordOrder
     * @return
     */
    List<DriverOrder> deliverOrderList(DriverOrder ordOrder);
    /**
     * 配送订单详情
     * @param orderId
     * @return
     */
    DriverOrder deliverOrderInfo(Long orderId);

    /**
     * 判断预警订单，并修改预警订单状态为是
     */
    void updateOrderWarn();

    /**
     * 判断问题订单，并修改问题订单状态为是
     */
    void updateOrderIssue();

    /**
     * 查询已完成送达的订单，改预警订单状态为非预警订单，改问题订单状态为非问题订单
     */
    void updateOrderIssueWarnToNo();

    /**
     * 计算总收入,与总销售金额,总入账,总抽拥,总出账
     * @param carPartsShopId
     * @return
     */
    ShopOrderMoneyVo getTotalMoney(Long carPartsShopId);

    /**
     * 查询总订单数量,待发货订单数量,待自提订单数量,待处理售后订单数量
     * @param carPartsShopId
     * @return
     */
    Card6Vo getTjOrderNum(Long carPartsShopId);

    /**
     * 订单数量折线走势图
     * @param orderNumParam
     * @return
     */
    ApiResult<List<OrderNumTjVo>> orderNumTj(OrderNumParam orderNumParam);

    /**
     * 查询系统用户信息
     * @param userId
     * @return
     */
    SysUser selectUserById(Long userId);

    /**
     * 商品销售金额折线走势图
     * @param orderNumParam
     * @return
     */
    List<OrderNumTjVo> getTotalMoney2(OrderNumParam orderNumParam);

    /**
     * 后台首页8个小卡片数据
     * @return
     */
    ApiResult<Card8Vo> card8Num();

    /**
     * 后台管理平台总收入与总销售额
     * @return
     */
    MoneyVo getMoneyVo();

    /**
     * 平台收入拆线走势图
     * @return
     */
    List<OrderNumTjVo> getPlatMoney(OrderNumParam orderNumParam);
    /**
     * 订单分析拆线走势图
     * @return
     */
    List<OrderNumTjVo2> getPlatMoney2(OrderNumParam orderNumParam);

    /**
     * 批量导入发货
     * @param orderList
     * @param updateSupport
     * @param operName
     * @return
     */
    String importData(List<OrdOrder> orderList, boolean updateSupport, String operName);

    /**
     * 分页查询积分订单
     * @param ordOrder
     * @return
     */
    List<OrdOrder> selectIntegralOrderList(OrdOrder ordOrder);

    /**
     * 查询积分订单详情
     * @param orderId
     * @return
     */
    public OrdOrder selectIntegralOrderByOrderId(Long orderId);

    /**
     * 水票订单列表
     * @param ordOrder
     * @return
     */
    List<OrdOrder> selectWaterCouponOrderList(OrdOrder ordOrder);

    /**
     * 通过商品查规格列表
     * @param goodsId
     * @return
     */
    List<LiGoodsSku> specsListByGoodsId(Long goodsId);

    /**
     * 分配/改派司机
     * @param parm
     */
    void distrDeliveryDriver(DeliveryParam parm);

    /**
     * 司机列表
     * @param param
     * @return
     */
    List<DriverListVo> driverList(DriverListParam param);

    /**
     * 商品列表
     * @param goodsName
     * @return
     */
    List<GoodsVo2> goodsListByGoodsName(String goodsName);
}
